package net.feixiang.creational.abstractFactory.contrary;

import net.feixiang.creational.abstractFactory.*;

/**
 * 非抽象工厂模式示例
 * 这种方式不符合抽象工厂模式的设计原则，因为每次添加新的操作系统都需要修改 createUI() 方法，这会导致代码的可维护性和可扩展性变差。
 *
 * @author 飞翔
 * @see <a href="https://www.feixiang.net/Java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E7%AC%AC%E4%B8%80%E7%AB%A0%E3%80%81%E5%88%9B%E5%BB%BA%E5%9E%8B%E6%A8%A1%E5%BC%8F/13.html">抽象工厂模式</a>
 */
public class NonAbstractFactoryDemo {
    public void createUI() {
        Button button;
        TextBox textBox;

        if (System.getProperty("os.name").contains("Windows")) {
            button = new WindowsButton();
            textBox = new WindowsTextBox();
        } else {
            button = new MacButton();
            textBox = new MacTextBox();
        }
        // 如果有其它系统，这些需要新增 if else 代码，即需要更改 createUI() 方法

        button.render();
        textBox.render();
    }

    public static void main(String[] args) {
        // 输出当前操作系统
        System.out.println("当前操作系统: " + System.getProperty("os.name"));

        NonAbstractFactoryDemo app = new NonAbstractFactoryDemo();
        app.createUI();
    }
}